Merge "EditPage: Factor stats collection into private methods"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 1 Feb 2017 04:08:42 +0000 (04:08 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 1 Feb 2017 04:08:42 +0000 (04:08 +0000)
1  2 
includes/EditPage.php

diff --combined includes/EditPage.php
@@@ -501,7 -501,7 +501,7 @@@ class EditPage 
        /**
         * @deprecated since 1.29, call edit directly
         */
 -      function submit() {
 +      public function submit() {
                $this->edit();
        }
  
         * is made and all is well do we actually save and redirect to
         * the newly-edited page.
         */
 -      function edit() {
 +      public function edit() {
                global $wgOut, $wgRequest, $wgUser;
                // Allow extensions to modify/prevent this form or submission
                if ( !Hooks::run( 'AlternateEdit', [ $this ] ) ) {
         * @param WebRequest $request
         * @throws ErrorPageError
         */
 -      function importFormData( &$request ) {
 +      public function importFormData( &$request ) {
                global $wgContLang, $wgUser;
  
                # Section edit can come from either the form or a link
         * Called on the first invocation, e.g. when a user clicks an edit link
         * @return bool If the requested section is valid
         */
 -      function initialiseForm() {
 +      public function initialiseForm() {
                global $wgUser;
                $this->edittime = $this->page->getTimestamp();
                $this->editRevId = $this->page->getLatest();
         * @return bool
         * @private
         */
 -      function tokenOk( &$request ) {
 +      public function tokenOk( &$request ) {
                global $wgUser;
                $token = $request->getVal( 'wpEditToken' );
                $this->mTokenOk = $wgUser->matchEditToken( $token );
         *   AS_BLOCKED_PAGE_FOR_USER. All that stuff needs to be cleaned up some
         * time.
         */
 -      function internalAttemptSave( &$result, $bot = false ) {
 +      public function internalAttemptSave( &$result, $bot = false ) {
                global $wgUser, $wgRequest, $wgParser, $wgMaxArticleSize;
                global $wgContentHandlerUseDB;
  
         *        one might think of X as the "base revision", which is NOT what this returns.
         * @return Revision Current version when the edit was started
         */
 -      function getBaseRevision() {
 +      public function getBaseRevision() {
                if ( !$this->mBaseRevision ) {
                        $db = wfGetDB( DB_MASTER );
                        $this->mBaseRevision = $this->editRevId
                return false;
        }
  
 -      function setHeaders() {
 +      public function setHeaders() {
                global $wgOut, $wgUser, $wgAjaxEditStash, $wgCookieSetOnAutoblock;
  
                $wgOut->addModules( 'mediawiki.action.edit' );
         * The $formCallback parameter is deprecated since MediaWiki 1.25. Please
         * use the EditPage::showEditForm:fields hook instead.
         */
 -      function showEditForm( $formCallback = null ) {
 +      public function showEditForm( $formCallback = null ) {
                global $wgOut, $wgUser;
  
                # need to parse the preview early so that we know which templates are used,
         *
         * @return array An array in the format [ $label, $input ]
         */
 -      function getSummaryInput( $summary = "", $labelText = null,
 +      public function getSummaryInput( $summary = "", $labelText = null,
                $inputAttrs = null, $spanLabelAttrs = null
        ) {
                // Note: the maxlength is overridden in JS to 255 and to make it use UTF-8 bytes, not characters.
         */
        protected function showPreview( $text ) {
                global $wgOut;
 -              if ( $this->mTitle->getNamespace() == NS_CATEGORY ) {
 +              if ( $this->mArticle instanceof CategoryPage ) {
                        $this->mArticle->openShowCategory();
                }
                # This hook seems slightly odd here, but makes things more
                # consistent for extensions.
                Hooks::run( 'OutputPageBeforeHTML', [ &$wgOut, &$text ] );
                $wgOut->addHTML( $text );
 -              if ( $this->mTitle->getNamespace() == NS_CATEGORY ) {
 +              if ( $this->mArticle instanceof CategoryPage ) {
                        $this->mArticle->closeShowCategory();
                }
        }
         * If this is a section edit, we'll replace the section as for final
         * save and then make a comparison.
         */
 -      function showDiff() {
 +      public function showDiff() {
                global $wgUser, $wgContLang, $wgOut;
  
                $oldtitlemsg = 'currentrev';
                // Avoid PHP 7.1 warning of passing $this by reference
                $editPage = $this;
                if ( Hooks::run( 'EditPageBeforeConflictDiff', [ &$editPage, &$wgOut ] ) ) {
-                       $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
-                       $stats->increment( 'edit.failures.conflict' );
-                       // Only include 'standard' namespaces to avoid creating unknown numbers of statsd metrics
-                       if (
-                               $this->mTitle->getNamespace() >= NS_MAIN &&
-                               $this->mTitle->getNamespace() <= NS_CATEGORY_TALK
-                       ) {
-                               $stats->increment( 'edit.failures.conflict.byNamespaceId.' . $this->mTitle->getNamespace() );
-                       }
+                       $this->incrementConflictStats();
  
                        $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
  
                }
        }
  
+       private function incrementConflictStats() {
+               $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
+               $stats->increment( 'edit.failures.conflict' );
+               // Only include 'standard' namespaces to avoid creating unknown numbers of statsd metrics
+               if (
+                       $this->mTitle->getNamespace() >= NS_MAIN &&
+                       $this->mTitle->getNamespace() <= NS_CATEGORY_TALK
+               ) {
+                       $stats->increment( 'edit.failures.conflict.byNamespaceId.' . $this->mTitle->getNamespace() );
+               }
+       }
        /**
         * @return string
         */
         * @throws MWException
         * @return string
         */
 -      function getPreviewText() {
 +      public function getPreviewText() {
                global $wgOut, $wgRawHtml, $wgLang;
                global $wgAllowUserCss, $wgAllowUserJs;
  
-               $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
                if ( $wgRawHtml && !$this->mTokenOk ) {
                        // Could be an offsite preview attempt. This is very unsafe if
                        // HTML is enabled, as it could be an attack.
                                        $this->context->msg( 'session_fail_preview_html' )->text() . "</div>",
                                        true, /* interface */true );
                        }
-                       $stats->increment( 'edit.failures.session_loss' );
+                       $this->incrementEditFailureStats( 'session_loss' );
                        return $parsedNote;
                }
  
                        if ( $this->mTriedSave && !$this->mTokenOk ) {
                                if ( $this->mTokenOkExceptSuffix ) {
                                        $note = $this->context->msg( 'token_suffix_mismatch' )->plain();
-                                       $stats->increment( 'edit.failures.bad_token' );
+                                       $this->incrementEditFailureStats( 'bad_token' );
                                } else {
                                        $note = $this->context->msg( 'session_fail_preview' )->plain();
-                                       $stats->increment( 'edit.failures.session_loss' );
+                                       $this->incrementEditFailureStats( 'session_loss' );
                                }
                        } elseif ( $this->incompleteForm ) {
                                $note = $this->context->msg( 'edit_form_incomplete' )->plain();
                                if ( $this->mTriedSave ) {
-                                       $stats->increment( 'edit.failures.incomplete_form' );
+                                       $this->incrementEditFailureStats( 'incomplete_form' );
                                }
                        } else {
                                $note = $this->context->msg( 'previewnote' )->plain() . ' ' . $continueEditing;
                return $previewhead . $previewHTML . $this->previewTextAfterContent;
        }
  
+       private function incrementEditFailureStats( $failureType ) {
+               $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
+               $stats->increment( 'edit.failures.' . $failureType );
+       }
        /**
         * Get parser options for a preview
         * @return ParserOptions
        /**
         * @return array
         */
 -      function getTemplates() {
 +      public function getTemplates() {
                if ( $this->preview || $this->section != '' ) {
                        $templates = [];
                        if ( !isset( $this->mParserOutput ) ) {
         * @param Title $title Title object for the page being edited (optional)
         * @return string
         */
 -      static function getEditToolbar( $title = null ) {
 +      public static function getEditToolbar( $title = null ) {
                global $wgContLang, $wgOut;
                global $wgEnableUploads, $wgForeignFileRepos;
  
         * Creates a basic error page which informs the user that
         * they have attempted to edit a nonexistent section.
         */
 -      function noSuchSectionPage() {
 +      public function noSuchSectionPage() {
                global $wgOut;
  
                $wgOut->prepareErrorPage( $this->context->msg( 'nosuchsectiontitle' ) );